Risk Parity (equal risk weighted)
## $w
## CTA_EW GAA_EW Global_Macro_EW Insurance
## 0.09460730 0.04799774 0.04663004 0.10716993
## LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW LS_Japan_EW
## 0.03884290 0.03653035 0.03652351 0.05514338
## LS_US_EW Activist_EW Distressed_EW EM_FI_EW
## 0.03613477 0.03976235 0.03855157 0.04090004
## Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 0.04563462 0.04114148 0.03884820 0.05443729
## FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 0.04261355 0.05464390 0.05402889 0.04985818
##
## $relative_risk_contribution
## CTA_EW GAA_EW Global_Macro_EW Insurance
## 0.05 0.05 0.05 0.05
## LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW LS_Japan_EW
## 0.05 0.05 0.05 0.05
## LS_US_EW Activist_EW Distressed_EW EM_FI_EW
## 0.05 0.05 0.05 0.05
## Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 0.05 0.05 0.05 0.05
## FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 0.05 0.05 0.05 0.05
##
## $obj_fun
## [1] 3.23212
##
## $is_feasible
## [1] TRUE
## CTA_EW GAA_EW Global_Macro_EW Insurance
## 0.09460730 0.04799774 0.04663004 0.10716993
## LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW LS_Japan_EW
## 0.03884290 0.03653035 0.03652351 0.05514338
## LS_US_EW Activist_EW Distressed_EW EM_FI_EW
## 0.03613477 0.03976235 0.03855157 0.04090004
## Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 0.04563462 0.04114148 0.03884820 0.05443729
## FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 0.04261355 0.05464390 0.05402889 0.04985818
## CTA_EW GAA_EW Global_Macro_EW Insurance LS_AsiaPacific_EW
## 2003-12-31 0.09460730 0.04799774 0.04663004 0.1071699 0.03884290
## 2004-01-31 0.09460730 0.04799774 0.04663004 0.1071699 0.03884290
## 2004-02-29 0.09403390 0.04828921 0.04631603 0.1068186 0.03853843
## 2004-03-31 0.09684184 0.04850084 0.04627843 0.1057904 0.03857216
## 2004-04-30 0.09460730 0.04799774 0.04663004 0.1071699 0.03884290
## 2004-05-31 0.09103616 0.04646764 0.04633923 0.1078073 0.03836757
## LS_Emerging_EW LS_Europe_EW LS_Japan_EW LS_US_EW Activist_EW
## 2003-12-31 0.03653035 0.03652351 0.05514338 0.03613477 0.03976235
## 2004-01-31 0.03653035 0.03652351 0.05514338 0.03613477 0.03976235
## 2004-02-29 0.03705618 0.03712921 0.05458365 0.03636277 0.04060264
## 2004-03-31 0.03777198 0.03729266 0.05403395 0.03636874 0.04138448
## 2004-04-30 0.03653035 0.03652351 0.05514338 0.03613477 0.03976235
## 2004-05-31 0.03600443 0.03683924 0.05677384 0.03594998 0.03975093
## Distressed_EW EM_FI_EW Risk_Arb_EW CB_Arb_EW RV_Credit_EW
## 2003-12-31 0.03855157 0.04090004 0.04563462 0.04114148 0.03884820
## 2004-01-31 0.03855157 0.04090004 0.04563462 0.04114148 0.03884820
## 2004-02-29 0.03921130 0.04126254 0.04526232 0.04117350 0.03883133
## 2004-03-31 0.03892338 0.04115124 0.04526008 0.04079715 0.03833746
## 2004-04-30 0.03855157 0.04090004 0.04563462 0.04114148 0.03884820
## 2004-05-31 0.03910046 0.04114834 0.04590042 0.04148792 0.03919176
## RV_FI_EW FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 2003-12-31 0.05443729 0.04261355 0.05464390 0.05402889 0.04985818
## 2004-01-31 0.05443729 0.04261355 0.05464390 0.05402889 0.04985818
## 2004-02-29 0.05407068 0.04232576 0.05431523 0.05379288 0.05002388
## 2004-03-31 0.05375697 0.04190642 0.05395195 0.05317352 0.04990635
## 2004-04-30 0.05443729 0.04261355 0.05464390 0.05402889 0.04985818
## 2004-05-31 0.05534647 0.04276485 0.05462273 0.05438869 0.05071201
## portfolio.returns
## Annualized Return 0.06318591
## portfolio.returns
## Annualized Return 0.06208222
## portfolio.returns
## Annualized Standard Deviation 0.03621619
## portfolio.returns
## ES -0.03364987
## Skew -1.313767
## Excess Kurtosis 5.873133
## portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%) 1.40019
## beta 0.1956528
## bull beta 0.178067
## bear beta 0.2142725
## From Trough To Depth Length To Trough Recovery
## 1 2008-06-30 2008-11-30 2009-07-31 -0.0920 14 6 8
## 2 2020-02-29 2020-03-31 2020-07-31 -0.0637 6 2 4
## 3 2011-05-31 2011-09-30 2012-02-29 -0.0337 10 5 5
## 4 2018-02-28 2018-12-31 2019-04-30 -0.0328 15 11 4
## 5 2010-05-31 2010-06-30 2010-09-30 -0.0168 5 2 3

## # A tibble: 2 × 10
## Portfolio Return StDev `Expected Shortfa…` Skew Kurtosis `Sharpe Ratio`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Equal Weighted 0.0659 0.0415 -0.0425 -1.54 7.20 1.29
## 2 Risk Parity 0.0632 0.0362 -0.0336 -1.31 5.87 1.40
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## # `Bull Beta` <dbl>
returns<-R
funds<-colnames(returns)
portfolio<-portfolio.spec(assets=funds)
portfolio<-add.constraint(portfolio=portfolio,type="full_investment")
portfolio<-add.constraint(portfolio = portfolio,type="box",
min=0,
max=1)
portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=return_target/12)
portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")
opt_mvo<-optimize.portfolio(R=returns,portfolio=portfolio,
optimize_method = "ROI",trace=TRUE)
## Registered S3 method overwritten by 'ROI':
## method from
## print.constraint PortfolioAnalytics
opt_mvo
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
##
## Call:
## optimize.portfolio(R = returns, portfolio = portfolio, optimize_method = "ROI",
## trace = TRUE)
##
## Optimal Weights:
## CTA_EW GAA_EW Global_Macro_EW Insurance
## 0.0000 0.0000 0.2332 0.1355
## LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW LS_Japan_EW
## 0.0000 0.0000 0.0000 0.0000
## LS_US_EW Activist_EW Distressed_EW EM_FI_EW
## 0.0000 0.0000 0.0000 0.0000
## Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 0.0000 0.0000 0.0000 0.1616
## FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 0.1090 0.0000 0.2665 0.0942
##
## Objective Measure:
## mean
## 0.005167
##
##
## StdDev
## 0.006583
weights<-opt_mvo$weights
round(weights,3)
## CTA_EW GAA_EW Global_Macro_EW Insurance
## 0.000 0.000 0.233 0.135
## LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW LS_Japan_EW
## 0.000 0.000 0.000 0.000
## LS_US_EW Activist_EW Distressed_EW EM_FI_EW
## 0.000 0.000 0.000 0.000
## Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 0.000 0.000 0.000 0.162
## FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 0.109 0.000 0.267 0.094
MVO.weights<-as.vector(matrix(weights,ncol=20)) #USE w AS A VECTOR TO BE ABLE TO USE ON_REBALANCE COMMAND
portfolioReturns<-Return.portfolio(R=R,weights = MVO.weights,rebalance_on = "quarters",verbose = TRUE)
head(round(portfolioReturns$BOP.Weight,3))
## CTA_EW GAA_EW Global_Macro_EW Insurance LS_AsiaPacific_EW
## 2003-12-31 0 0 0.233 0.135 0
## 2004-01-31 0 0 0.233 0.135 0
## 2004-02-29 0 0 0.233 0.136 0
## 2004-03-31 0 0 0.234 0.135 0
## 2004-04-30 0 0 0.233 0.135 0
## 2004-05-31 0 0 0.230 0.135 0
## LS_Emerging_EW LS_Europe_EW LS_Japan_EW LS_US_EW Activist_EW
## 2003-12-31 0 0 0 0 0
## 2004-01-31 0 0 0 0 0
## 2004-02-29 0 0 0 0 0
## 2004-03-31 0 0 0 0 0
## 2004-04-30 0 0 0 0 0
## 2004-05-31 0 0 0 0 0
## Distressed_EW EM_FI_EW Risk_Arb_EW CB_Arb_EW RV_Credit_EW RV_FI_EW
## 2003-12-31 0 0 0 0 0 0.162
## 2004-01-31 0 0 0 0 0 0.162
## 2004-02-29 0 0 0 0 0 0.161
## 2004-03-31 0 0 0 0 0 0.161
## 2004-04-30 0 0 0 0 0 0.162
## 2004-05-31 0 0 0 0 0 0.163
## FEMN_EW QEMN_EW Stat_Arb_EW Struct_Credit_EW
## 2003-12-31 0.109 0 0.267 0.094
## 2004-01-31 0.109 0 0.267 0.094
## 2004-02-29 0.109 0 0.267 0.095
## 2004-03-31 0.108 0 0.265 0.095
## 2004-04-30 0.109 0 0.267 0.094
## 2004-05-31 0.109 0 0.267 0.095
Return.annualized(portfolioReturns$returns,geometric = TRUE,scale=12)
## portfolio.returns
## Annualized Return 0.06369037
Return.annualized(portfolioReturns$returns,geometric = FALSE,scale=12)
## portfolio.returns
## Annualized Return 0.06216313
StdDev.annualized(portfolioReturns$returns)
## portfolio.returns
## Annualized Standard Deviation 0.02282451
ES(portfolioReturns$returns)
## portfolio.returns
## ES -0.02260593
cat('Skew',skewness(portfolioReturns$returns))
## Skew -1.507038
cat('Excess Kurtosis',kurtosis(portfolioReturns$returns,method="excess"))
## Excess Kurtosis 8.175262
SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)
## portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%) 2.243656
cat('beta',CAPM.beta(portfolioReturns$returns,equity.ts))
## beta 0.09162089
cat('bull beta',CAPM.beta.bull(portfolioReturns$returns,equity.ts))
## bull beta 0.1158619
cat('bear beta',CAPM.beta.bear(portfolioReturns$returns,equity.ts))
## bear beta 0.09307244
table.Drawdowns(portfolioReturns$returns)
## From Trough To Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-06-30 -0.0386 5 2 3
## 2 2008-09-30 2008-10-31 2009-01-31 -0.0316 5 2 3
## 3 2018-10-31 2018-12-31 2019-03-31 -0.0203 6 3 3
## 4 2008-03-31 2008-03-31 2008-05-31 -0.0178 3 1 2
## 5 2017-09-30 2017-09-30 2018-01-31 -0.0070 5 1 4
charts.PerformanceSummary(portfolioReturns$returns)

portfolio.return<-Return.annualized(portfolioReturns$returns)[1]
portfolio.sd<-StdDev.annualized(portfolioReturns$returns)[1]
portfolio.ES<-ES(portfolioReturns$returns)[1]
portfolio.skew<-skewness(portfolioReturns$returns)[1]
portfolio.kurt<-kurtosis(portfolioReturns$returns,method="excess")[1]
portfolio.sharpe<-SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)[1]
portfolio.beta<-CAPM.beta(portfolioReturns$returns,equity.ts)[1]
portfolio.bull<-CAPM.beta.bull(portfolioReturns$returns,equity.ts)[1]
portfolio.bear<-CAPM.beta.bear(portfolioReturns$returns,equity.ts)[1]
portfolio.results<-portfolio.results %>%
add_row(Portfolio="MVO",
Return=portfolio.return,StDev=portfolio.sd,
`Expected Shortfall`=portfolio.ES,Skew=portfolio.skew,
Kurtosis=portfolio.kurt,`Sharpe Ratio`=portfolio.sharpe,
`Equity Beta`=portfolio.beta,`Bear Beta`=portfolio.bear,
`Bull Beta`=portfolio.bull)
portfolio.results
## # A tibble: 3 × 10
## Portfolio Return StDev `Expected Shortfa…` Skew Kurtosis `Sharpe Ratio`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Equal Weighted 0.0659 0.0415 -0.0425 -1.54 7.20 1.29
## 2 Risk Parity 0.0632 0.0362 -0.0336 -1.31 5.87 1.40
## 3 MVO 0.0637 0.0228 -0.0226 -1.51 8.18 2.24
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## # `Bull Beta` <dbl>
returns<-R
short_returns<-returns['2011/'] #for equal weighting
funds<-colnames(returns)
#Equal weighted portfolio
equal_weight<- rep(1/ncol(returns),ncol(returns))
base_case<-Return.portfolio(R=short_returns,weights=equal_weight,rebalance_on = "years")
colnames(base_case)<-"Equal Weighted"
#table.AnnualizedReturns(base_case)
#MVO portfolio
portfolio<-portfolio.spec(assets=funds)
portfolio<-add.constraint(portfolio=portfolio,type="full_investment")
portfolio<-add.constraint(portfolio = portfolio,type="box",
min=0,
max=1)
#portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=0.053/12)
#portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")
opt_rolling<-optimize.portfolio.rebalancing(R=returns,portfolio=portfolio,
optimize_method = "ROI",rebalance_on = "years",
training_period = 84,rolling_period= 84,trace=TRUE)
## Warning: executing %dopar% sequentially: no parallel backend registered
MVO_returns<-Return.portfolio(returns,extractWeights(opt_rolling))
MVO_weight<-extractWeights(opt_rolling)
ret_summary<-cbind(base_case,MVO_returns)
colnames(ret_summary)<-c("Equal Weighted","MVO")
table.AnnualizedReturns(ret_summary)
## Equal Weighted MVO
## Annualized Return 0.0531 0.0439
## Annualized Std Dev 0.0370 0.0234
## Annualized Sharpe (Rf=0%) 1.4378 1.8784
table.Drawdowns(base_case)
## From Trough To Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-07-31 -0.0748 6 2 4
## 2 2011-05-31 2011-09-30 2012-03-31 -0.0452 11 5 6
## 3 2018-02-28 2018-12-31 2019-04-30 -0.0311 15 11 4
## 4 2015-06-30 2016-02-29 2016-07-31 -0.0221 14 9 5
## 5 2012-04-30 2012-05-31 2012-08-31 -0.0130 5 2 3
table.Drawdowns(MVO_returns)
## From Trough To Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-07-31 -0.0452 6 2 4
## 2 2017-09-30 2017-09-30 2018-08-31 -0.0212 12 1 11
## 3 2018-10-31 2018-12-31 2019-06-30 -0.0208 9 3 6
## 4 2011-03-31 2011-03-31 2011-05-31 -0.0073 3 1 2
## 5 2011-08-31 2011-09-30 2011-10-31 -0.0054 3 2 1
chart.Weights(opt_rolling)

#Optimization with risk budget
portfolio.rb<-portfolio.spec(assets=funds)
portfolio.rb<-add.constraint(portfolio=portfolio.rb,type="full_investment")
portfolio.rb<-add.constraint(portfolio=portfolio.rb,type="long_only")
portfolio.rb<-add.objective(portfolio=portfolio.rb,
type="risk_budget",
name="StdDev",
min_prisk=0,
max_prisk=0.25)
#portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=0.053/12)
#portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
#portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")
set.seed(1)
rb_rolling<-optimize.portfolio.rebalancing(R=returns,portfolio=portfolio.rb,
optimize_method = "random",rebalance_on = "years",
training_period = 84,rolling_period= 84,trace=TRUE)
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
## Leverage constraint min_sum and max_sum are restrictive,
## consider relaxing. e.g. 'full_investment' constraint should be min_sum=0.99 and max_sum=1.01
risk_returns<-Return.portfolio(returns,extractWeights(rb_rolling))
risk_weight<-extractWeights(rb_rolling)
ret_summary<-cbind(base_case,MVO_returns,risk_returns)
colnames(ret_summary)<-c("Equal Weighted","MVO","Risk Budget")
table.AnnualizedReturns(ret_summary)
## Equal Weighted MVO Risk Budget
## Annualized Return 0.0531 0.0439 0.0543
## Annualized Std Dev 0.0370 0.0234 0.0316
## Annualized Sharpe (Rf=0%) 1.4378 1.8784 1.7167
table.CAPM(ret_summary,equity.ts)
## Equal Weighted to APP_Equity MVO to APP_Equity
## Alpha 0.0021 0.0026
## Beta 0.2315 0.1043
## Beta+ 0.1967 0.1150
## Beta- 0.3160 0.1543
## R-squared 0.7361 0.3733
## Annualized Alpha 0.0257 0.0315
## Correlation 0.8580 0.6110
## Correlation p-value 0.0000 0.0000
## Tracking Error 0.1588 0.1587
## Active Premium -0.0606 -0.0698
## Information Ratio -0.3816 -0.4398
## Treynor Ratio 0.2295 0.4211
## Risk Budget to APP_Equity
## Alpha 0.0026
## Beta 0.1886
## Beta+ 0.1647
## Beta- 0.2392
## R-squared 0.6671
## Annualized Alpha 0.0318
## Correlation 0.8167
## Correlation p-value 0.0000
## Tracking Error 0.1576
## Active Premium -0.0594
## Information Ratio -0.3771
## Treynor Ratio 0.2879
table.Stats(ret_summary)
## Equal Weighted MVO Risk Budget
## Observations 127.0000 127.0000 127.0000
## NAs 0.0000 0.0000 0.0000
## Minimum -0.0634 -0.0410 -0.0410
## Quartile 1 -0.0001 0.0010 0.0004
## Median 0.0055 0.0036 0.0045
## Arithmetic Mean 0.0044 0.0036 0.0045
## Geometric Mean 0.0043 0.0036 0.0044
## Quartile 3 0.0093 0.0069 0.0094
## Maximum 0.0336 0.0227 0.0258
## SE Mean 0.0009 0.0006 0.0008
## LCL Mean (0.95) 0.0025 0.0024 0.0029
## UCL Mean (0.95) 0.0063 0.0048 0.0061
## Variance 0.0001 0.0000 0.0001
## Stdev 0.0107 0.0068 0.0091
## Skewness -1.8977 -2.4705 -1.1165
## Kurtosis 11.8620 15.1489 4.6094
table.Drawdowns(risk_returns)
## From Trough To Depth Length To Trough Recovery
## 1 2011-05-31 2011-09-30 2012-08-31 -0.0491 16 5 11
## 2 2020-02-29 2020-03-31 2020-06-30 -0.0421 5 2 3
## 3 2015-06-30 2015-09-30 2016-05-31 -0.0255 12 4 8
## 4 2018-10-31 2018-12-31 2019-03-31 -0.0201 6 3 3
## 5 2013-06-30 2013-06-30 2013-07-31 -0.0071 2 1 1
ES(ret_summary)
## Equal Weighted MVO Risk Budget
## ES -0.04785089 -0.03190504 -0.02669057
table.DownsideRisk(ret_summary)
## Equal Weighted MVO Risk Budget
## Semi Deviation 0.0084 0.0055 0.0070
## Gain Deviation 0.0064 0.0040 0.0058
## Loss Deviation 0.0114 0.0086 0.0087
## Downside Deviation (MAR=10%) 0.0104 0.0080 0.0091
## Downside Deviation (Rf=0%) 0.0069 0.0044 0.0053
## Downside Deviation (0%) 0.0069 0.0044 0.0053
## Maximum Drawdown 0.0748 0.0452 0.0491
## Historical VaR (95%) -0.0112 -0.0031 -0.0079
## Historical ES (95%) -0.0217 -0.0140 -0.0188
## Modified VaR (95%) -0.0156 -0.0093 -0.0123
## Modified ES (95%) -0.0479 -0.0319 -0.0267
chart.Weights(rb_rolling)

charts.PerformanceSummary(ret_summary)

#Create states
z <- HedgeRSReturns.t$VIX #load VIX into z
score <- (z-mean(z, na.rm = TRUE))/sd(z, na.rm = TRUE) #calculate z score
APP_Equity<-HedgeRSReturns.t$APP_Equity
Hedge_States<-cbind(hedgeData,score,APP_Equity)#add z score to the data.table
Hedge_States$state<-"Central" #create new column based on score - named as state
Hedge_States$state[score>=1]<-"High"
Hedge_States$state[score<=1]<-"Low"
##Create stressed subset
stress.t<-Hedge_States %>%
filter(state=="High")
bull.t<-Hedge_States %>%
filter(APP_Equity>0)
bear.t<-Hedge_States %>%
filter(APP_Equity<0)
#Calculate the features
HF_beta<-sapply(R,beta)
HF_sd<-sapply(R,sd)*(12^0.5)
HF_mean<-sapply(R,mean)*12
HF_skew<-sapply(R,skewness)
HF_kurt<-sapply(R,kurtosis)
Sharpe<-(HF_mean-(mean(cash$Cash)*12))/HF_sd
Treynor<-(HF_mean-(mean(cash$Cash)*12))/HF_beta
Stress<-sapply(stress.t[,2:21],stressbeta)
Bull_beta<-sapply(bull.t[,2:21], bullbeta)
Bear_beta<-sapply(bear.t[,2:21], bearbeta)
df_base<-cbind(HF_mean,HF_sd,HF_skew,HF_kurt,Sharpe,Treynor,HF_beta,Stress,Bull_beta,Bear_beta)
#df_base<-cbind(HF_mean,HF_sd)
#HF_names<-c("CTA","EM GM","GAA","Global Macro","Insurance","L/S Asia Pac",
# "LS Emerging","LS Europe","LS Global","LS Japan","LS US",
# "Activist","Distressed","EM FI","Risk Arb","CB Arb",
# "RV Credit","RV FI","FEMN","QEMN","Stat Arb","Structured Credit",
# "Multi Event","Multi RV","Multi Diversifited","Multi Opportunistic")
#row.names(df_base)<-HF_names
df_base_round<-round(df_base,3)
df_base_round
## HF_mean HF_sd HF_skew HF_kurt Sharpe Treynor HF_beta Stress
## CTA_EW 0.053 0.075 0.153 -0.028 0.543 1.423 0.029 -0.130
## GAA_EW 0.037 0.042 -0.116 0.730 0.611 0.231 0.110 0.085
## Global_Macro_EW 0.063 0.034 0.396 0.148 1.505 0.555 0.092 0.048
## Insurance 0.044 0.039 -4.257 26.770 0.827 1.594 0.020 0.022
## LS_AsiaPacific_EW 0.090 0.086 -0.359 1.209 0.909 0.183 0.427 0.453
## LS_Emerging_EW 0.068 0.083 -0.508 1.587 0.679 0.137 0.412 0.428
## LS_Europe_EW 0.064 0.051 -0.765 1.438 1.006 0.205 0.252 0.222
## LS_Japan_EW 0.052 0.061 0.331 1.586 0.665 0.183 0.221 0.200
## LS_US_EW 0.079 0.072 -0.724 1.998 0.931 0.157 0.427 0.412
## Activist_EW 0.114 0.135 -1.208 6.227 0.758 0.125 0.817 0.920
## Distressed_EW 0.078 0.072 -2.110 10.259 0.921 0.189 0.349 0.421
## EM_FI_EW 0.067 0.072 -3.173 21.635 0.773 0.181 0.306 0.417
## Risk_Arb_EW 0.055 0.039 -1.233 10.402 1.114 0.285 0.151 0.172
## CB_Arb_EW 0.052 0.071 -3.920 29.417 0.564 0.133 0.300 0.441
## RV_Credit_EW 0.058 0.045 -1.438 10.076 1.028 0.224 0.208 0.291
## RV_FI_EW 0.063 0.037 -3.730 26.194 1.392 0.484 0.106 0.183
## FEMN_EW 0.056 0.026 -0.731 5.075 1.651 0.534 0.082 0.087
## QEMN_EW 0.037 0.032 -0.805 1.831 0.799 0.400 0.063 0.066
## Stat_Arb_EW 0.059 0.031 -0.095 1.023 1.506 0.573 0.083 0.136
## Struct_Credit_EW 0.098 0.068 -7.122 79.325 1.275 0.426 0.203 0.284
## Bull_beta Bear_beta
## CTA_EW 0.071 -0.194
## GAA_EW 0.110 0.057
## Global_Macro_EW 0.151 -0.003
## Insurance 0.056 0.034
## LS_AsiaPacific_EW 0.405 0.434
## LS_Emerging_EW 0.404 0.419
## LS_Europe_EW 0.192 0.236
## LS_Japan_EW 0.101 0.272
## LS_US_EW 0.390 0.403
## Activist_EW 0.748 0.989
## Distressed_EW 0.244 0.491
## EM_FI_EW 0.245 0.473
## Risk_Arb_EW 0.137 0.184
## CB_Arb_EW 0.260 0.497
## RV_Credit_EW 0.199 0.277
## RV_FI_EW 0.122 0.158
## FEMN_EW 0.101 0.049
## QEMN_EW 0.005 0.089
## Stat_Arb_EW 0.132 0.075
## Struct_Credit_EW 0.078 0.405
df_select<-cbind(HF_mean,HF_sd,HF_skew,HF_kurt,Bear_beta)
df<-na.omit(df_select)
df<-scale(df)
df
## HF_mean HF_sd HF_skew HF_kurt Bear_beta
## CTA_EW -0.59695805 0.63577420 0.88967794 -0.63612129 -1.78037171
## GAA_EW -1.38523139 -0.64406096 0.75050343 -0.59549477 -0.81039723
## Global_Macro_EW -0.06464649 -0.93092121 1.01476497 -0.62665256 -1.04249511
## Insurance -1.04617035 -0.75236459 -1.38648118 0.79958923 -0.89959050
## LS_AsiaPacific_EW 1.30751324 1.04406683 0.62511354 -0.56985602 0.64469505
## LS_Emerging_EW 0.20146281 0.94200331 0.54859936 -0.54959753 0.58780966
## LS_Europe_EW -0.04242479 -0.26980880 0.41580928 -0.55757031 -0.12030004
## LS_Japan_EW -0.62058162 0.08669125 0.98154019 -0.54960556 0.01673997
## LS_US_EW 0.73921495 0.51198058 0.43715944 -0.52754715 0.52263317
## Activist_EW 2.54040588 2.90994076 0.18709726 -0.30098393 2.78581559
## Distressed_EW 0.69346403 0.50488827 -0.27817132 -0.08497369 0.86482762
## EM_FI_EW 0.14115464 0.49602596 -0.82703090 0.52450744 0.79414057
## Risk_Arb_EW -0.48454887 -0.75616628 0.17448593 -0.07730399 -0.32093943
## CB_Arb_EW -0.64233146 0.47004402 -1.21253598 0.94138936 0.88644722
## RV_Credit_EW -0.30383188 -0.50183219 0.06852502 -0.09478826 0.03906774
## RV_FI_EW -0.06198975 -0.82478686 -1.11447982 0.76876095 -0.42245276
## FEMN_EW -0.45001764 -1.21977855 0.43327431 -0.36270597 -0.84381758
## QEMN_EW -1.39713970 -1.02736324 0.39494512 -0.53648698 -0.68963150
## Stat_Arb_EW -0.26509541 -1.03149464 0.76182882 -0.57980615 -0.74254778
## Struct_Credit_EW 1.73775186 0.35716215 -2.86462540 3.61524716 0.53036705
## attr(,"scaled:center")
## HF_mean HF_sd HF_skew HF_kurt Bear_beta
## 0.06440247 0.05851137 -1.57076228 11.84512776 0.26719421
## attr(,"scaled:scale")
## HF_mean HF_sd HF_skew HF_kurt Bear_beta
## 0.01957104 0.02624511 1.93772732 18.66544446 0.25896886
heatmap(df,scale="row")

pheatmap(df,cutree_rows = 8)

#Calculate the clusters
set.seed(1)
distance<-get_dist(df,method="euclidean")
fviz_dist(distance,gradient=list(low="#00AFBB",mid="white",high="#FC4E07"))

fviz_nbclust(df,kmeans,method="wss")

fviz_nbclust(df,kmeans,method="silhouette")

gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, d.power=1,
K.max = 12, B = 300)
fviz_gap_stat(gap_stat)

k2<-kmeans(df,centers = 8,nstart = 25)
fviz_cluster(k2,data=df,main="K means")

#Agglomerative clustering
res.dist<-dist(df,method="euclidean")
res.hc<-hclust(d=res.dist,method="ward.D2")
fviz_dend(res.hc,ced=0.5)
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.

res.coph<-cophenetic(res.hc)
cor(res.dist,res.coph)
## [1] 0.5630329
#create clusters
cluster1<-R$Activist_EW
cluster2<-R$Struct_Credit_EW
cluster3<-cbind(R$Insurance,R$RV_FI_EW)
cluster4<-R$CTA_EW
cluster5<-cbind(R$GAA_EW,R$QEMN_EW,R$FEMN_EW,R$Global_Macro_EW,R$Stat_Arb_EW)
cluster6<-cbind(R$EM_FI_EW,R$CB_Arb_EW)
cluster7<-cbind(R$LS_Europe_EW,R$LS_Japan_EW,R$Risk_Arb_EW,R$RV_Credit_EW)
cluster8<-cbind(R$LS_Emerging_EW,R$Distressed_EW,R$LS_AsiaPacific_EW,R$LS_US_EW)
#risk parity cluster3
cor3<-cor(cluster3)
riskParity<-riskParityPortfolio(cor3)
riskParity$w
## Insurance RV_FI_EW
## 0.5 0.5
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster3,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster3.returns<-PortfolioReturns$returns
colnames(cluster3.returns) = "cluster3"
head(cluster3.returns)
## cluster3
## 2003-12-31 0.010670414
## 2004-01-31 0.009426982
## 2004-02-29 0.006796279
## 2004-03-31 0.001945915
## 2004-04-30 0.005968538
## 2004-05-31 0.002264446
#risk parity cluster5
cor5<-cor(cluster5)
riskParity<-riskParityPortfolio(cor5)
riskParity$w
## GAA_EW QEMN_EW FEMN_EW Global_Macro_EW Stat_Arb_EW
## 0.1973061 0.2022335 0.1962068 0.2013431 0.2029106
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster5,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster5.returns<-PortfolioReturns$returns
colnames(cluster5.returns) = "cluster5"
head(cluster5.returns)
## cluster5
## 2003-12-31 0.0142605069
## 2004-01-31 0.0108685760
## 2004-02-29 0.0096428902
## 2004-03-31 0.0071583794
## 2004-04-30 -0.0108423834
## 2004-05-31 -0.0005066958
#risk parity cluster6
cor6<-cor(cluster6)
riskParity<-riskParityPortfolio(cor6)
riskParity$w
## EM_FI_EW CB_Arb_EW
## 0.5 0.5
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster6,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster6.returns<-PortfolioReturns$returns
colnames(cluster6.returns) = "cluster6"
head(cluster6.returns)
## cluster6
## 2003-12-31 0.012170897
## 2004-01-31 0.019396765
## 2004-02-29 0.008633715
## 2004-03-31 0.011531761
## 2004-04-30 0.001911567
## 2004-05-31 -0.010224961
#risk parity cluster7
cor7<-cor(cluster7)
riskParity<-riskParityPortfolio(cor7)
riskParity$w
## LS_Europe_EW LS_Japan_EW Risk_Arb_EW RV_Credit_EW
## 0.2293850 0.2697013 0.2565336 0.2443802
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster7,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster7.returns<-PortfolioReturns$returns
colnames(cluster7.returns) = "cluster7"
head(cluster7.returns)
## cluster7
## 2003-12-31 0.011833357
## 2004-01-31 0.013357164
## 2004-02-29 0.009769259
## 2004-03-31 0.021169238
## 2004-04-30 0.008244672
## 2004-05-31 -0.007019642
#risk parity cluster3
cor8<-cor(cluster8)
riskParity<-riskParityPortfolio(cor8)
riskParity$w
## LS_Emerging_EW Distressed_EW LS_AsiaPacific_EW LS_US_EW
## 0.2446345 0.2571271 0.2518334 0.2464050
weights = xts(t(riskParity$w), as.Date("2003-12-31"))
risk.parity.weights<-as.vector(matrix(weights,ncol=ncol(weights)))
PortfolioReturns<-Return.portfolio(cluster8,weights=risk.parity.weights,rebalance_on="quarters",verbose = TRUE)
cluster8.returns<-PortfolioReturns$returns
colnames(cluster8.returns) = "cluster8"
head(cluster8.returns)
## cluster8
## 2003-12-31 0.031494637
## 2004-01-31 0.022117223
## 2004-02-29 0.017780818
## 2004-03-31 0.007954177
## 2004-04-30 -0.009476485
## 2004-05-31 -0.010701347
cluster1.returns<-cluster1
colnames(cluster1.returns) = "cluster1"
cluster2.returns<-cluster2
colnames(cluster2.returns) = "cluster2"
cluster4.returns<-cluster4
colnames(cluster4.returns) = "cluster4"
#optimize across the clusters
R.cluster<-cbind(cluster1.returns,cluster2.returns,cluster3.returns,
cluster4.returns,cluster5.returns,cluster6.returns,
cluster7.returns,cluster8.returns)
returns<-R.cluster
funds<-colnames(returns)
portfolio<-portfolio.spec(assets=funds)
portfolio<-add.constraint(portfolio=portfolio,type="full_investment")
portfolio<-add.constraint(portfolio = portfolio,type="box",
min=0,
max=1)
#portfolio<-add.objective(portfolio=portfolio,type="return",name="mean")
portfolio<-add.constraint(portfolio=portfolio,type="return",return_target=return_target/12)
portfolio <- add.objective(portfolio=portfolio, type="risk", name="StdDev")
opt_mvo<-optimize.portfolio(R=returns,portfolio=portfolio,
optimize_method = "ROI",trace=TRUE)
opt_mvo
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
##
## Call:
## optimize.portfolio(R = returns, portfolio = portfolio, optimize_method = "ROI",
## trace = TRUE)
##
## Optimal Weights:
## cluster1 cluster2 cluster3 cluster4 cluster5 cluster6 cluster7 cluster8
## 0.0000 0.2113 0.3911 0.0515 0.3461 0.0000 0.0000 0.0000
##
## Objective Measure:
## StdDev
## 0.007541
weights<-opt_mvo$weights
round(weights,3)
## cluster1 cluster2 cluster3 cluster4 cluster5 cluster6 cluster7 cluster8
## 0.000 0.211 0.391 0.052 0.346 0.000 0.000 0.000
MVO.weights<-as.vector(matrix(weights,ncol=8)) #USE w AS A VECTOR TO BE ABLE TO USE ON_REBALANCE COMMAND
portfolioReturns<-Return.portfolio(R=R.cluster,weights = MVO.weights,rebalance_on = "quarters",verbose = TRUE)
head(round(portfolioReturns$BOP.Weight,3))
## cluster1 cluster2 cluster3 cluster4 cluster5 cluster6 cluster7
## 2003-12-31 0 0.211 0.391 0.052 0.346 0 0
## 2004-01-31 0 0.211 0.391 0.052 0.346 0 0
## 2004-02-29 0 0.213 0.390 0.051 0.346 0 0
## 2004-03-31 0 0.213 0.389 0.053 0.345 0 0
## 2004-04-30 0 0.211 0.391 0.052 0.346 0 0
## 2004-05-31 0 0.214 0.394 0.049 0.343 0 0
## cluster8
## 2003-12-31 0
## 2004-01-31 0
## 2004-02-29 0
## 2004-03-31 0
## 2004-04-30 0
## 2004-05-31 0
Return.annualized(portfolioReturns$returns,geometric = TRUE,scale=12)
## portfolio.returns
## Annualized Return 0.06362754
Return.annualized(portfolioReturns$returns,geometric = FALSE,scale=12)
## portfolio.returns
## Annualized Return 0.06218854
StdDev.annualized(portfolioReturns$returns)
## portfolio.returns
## Annualized Standard Deviation 0.02615529
ES(portfolioReturns$returns)
## portfolio.returns
## ES -0.03669919
cat('Skew',skewness(portfolioReturns$returns))
## Skew -3.26019
cat('Excess Kurtosis',kurtosis(portfolioReturns$returns,method="excess"))
## Excess Kurtosis 22.50283
SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)
## portfolio.returns
## Annualized Sharpe Ratio (Rf=1.2%) 1.955331
cat('beta',CAPM.beta(portfolioReturns$returns,equity.ts))
## beta 0.09896172
cat('bull beta',CAPM.beta.bull(portfolioReturns$returns,equity.ts))
## bull beta 0.08919921
cat('bear beta',CAPM.beta.bear(portfolioReturns$returns,equity.ts))
## bear beta 0.131854
table.Drawdowns(portfolioReturns$returns)
## From Trough To Depth Length To Trough Recovery
## 1 2020-02-29 2020-03-31 2020-09-30 -0.0603 8 2 6
## 2 2008-08-31 2008-10-31 2009-05-31 -0.0447 10 3 7
## 3 2018-10-31 2018-12-31 2019-04-30 -0.0210 7 3 4
## 4 2008-03-31 2008-03-31 2008-05-31 -0.0186 3 1 2
## 5 2017-09-30 2017-09-30 2018-01-31 -0.0151 5 1 4
charts.PerformanceSummary(portfolioReturns$returns)

portfolio.return<-Return.annualized(portfolioReturns$returns)[1]
portfolio.sd<-StdDev.annualized(portfolioReturns$returns)[1]
portfolio.ES<-ES(portfolioReturns$returns)[1]
portfolio.skew<-skewness(portfolioReturns$returns)[1]
portfolio.kurt<-kurtosis(portfolioReturns$returns,method="excess")[1]
portfolio.sharpe<-SharpeRatio.annualized(portfolioReturns$returns,Rf=cash.ts)[1]
portfolio.beta<-CAPM.beta(portfolioReturns$returns,equity.ts)[1]
portfolio.bull<-CAPM.beta.bull(portfolioReturns$returns,equity.ts)[1]
portfolio.bear<-CAPM.beta.bear(portfolioReturns$returns,equity.ts)[1]
portfolio.results<-portfolio.results %>%
add_row(Portfolio="Clusters",
Return=portfolio.return,StDev=portfolio.sd,
`Expected Shortfall`=portfolio.ES,Skew=portfolio.skew,
Kurtosis=portfolio.kurt,`Sharpe Ratio`=portfolio.sharpe,
`Equity Beta`=portfolio.beta,`Bear Beta`=portfolio.bear,
`Bull Beta`=portfolio.bull)
print(portfolio.results)
## # A tibble: 4 × 10
## Portfolio Return StDev `Expected Shortfa…` Skew Kurtosis `Sharpe Ratio`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Equal Weighted 0.0659 0.0415 -0.0425 -1.54 7.20 1.29
## 2 Risk Parity 0.0632 0.0362 -0.0336 -1.31 5.87 1.40
## 3 MVO 0.0637 0.0228 -0.0226 -1.51 8.18 2.24
## 4 Clusters 0.0636 0.0262 -0.0367 -3.26 22.5 1.96
## # … with 3 more variables: `Equity Beta` <dbl>, `Bear Beta` <dbl>,
## # `Bull Beta` <dbl>
cols.cor<-cor(R,use="pairwise.complete.obs",method="pearson")
cols.cor
## CTA_EW GAA_EW Global_Macro_EW Insurance
## CTA_EW 1.000000000 0.63384711 0.53686342 0.06741771
## GAA_EW 0.633847113 1.00000000 0.56914962 0.07266948
## Global_Macro_EW 0.536863422 0.56914962 1.00000000 0.04872518
## Insurance 0.067417709 0.07266948 0.04872518 1.00000000
## LS_AsiaPacific_EW 0.167792587 0.45882263 0.54436081 0.07526930
## LS_Emerging_EW 0.157587754 0.51865062 0.58058153 0.03679552
## LS_Europe_EW 0.169721609 0.50724258 0.54907001 0.08680519
## LS_Japan_EW 0.002572041 0.24691161 0.36295616 -0.05822443
## LS_US_EW 0.122579030 0.42256098 0.51706311 0.09305335
## Activist_EW -0.027255817 0.34707850 0.37326421 0.04457368
## Distressed_EW -0.069595006 0.29261413 0.36038497 0.12131419
## EM_FI_EW -0.026294832 0.32780172 0.36751742 0.11441308
## Risk_Arb_EW 0.100254958 0.34145982 0.42838542 0.07333043
## CB_Arb_EW -0.079622659 0.30312500 0.26758387 0.10601017
## RV_Credit_EW -0.066244054 0.31982005 0.32088636 0.12744401
## RV_FI_EW -0.113956214 0.23069016 0.23383698 0.11482934
## FEMN_EW 0.191144869 0.39571343 0.57004066 0.11491615
## QEMN_EW 0.297030985 0.49622175 0.33938198 0.09516470
## Stat_Arb_EW 0.221072992 0.39657026 0.31938751 0.04140549
## Struct_Credit_EW -0.102280565 0.18668909 0.27170746 0.13256804
## LS_AsiaPacific_EW LS_Emerging_EW LS_Europe_EW LS_Japan_EW
## CTA_EW 0.1677926 0.15758775 0.16972161 0.002572041
## GAA_EW 0.4588226 0.51865062 0.50724258 0.246911607
## Global_Macro_EW 0.5443608 0.58058153 0.54907001 0.362956164
## Insurance 0.0752693 0.03679552 0.08680519 -0.058224430
## LS_AsiaPacific_EW 1.0000000 0.84669192 0.70878355 0.560856922
## LS_Emerging_EW 0.8466919 1.00000000 0.77330518 0.533503186
## LS_Europe_EW 0.7087836 0.77330518 1.00000000 0.545237358
## LS_Japan_EW 0.5608569 0.53350319 0.54523736 1.000000000
## LS_US_EW 0.7533905 0.76657822 0.83364392 0.545546239
## Activist_EW 0.6853214 0.70069722 0.76213748 0.540255875
## Distressed_EW 0.6443269 0.72871412 0.69944917 0.484097856
## EM_FI_EW 0.5989139 0.73570708 0.59124636 0.370909454
## Risk_Arb_EW 0.5486853 0.54897213 0.60665110 0.355241291
## CB_Arb_EW 0.6377953 0.67070627 0.58656248 0.399890956
## RV_Credit_EW 0.6557430 0.72187189 0.67222154 0.435165105
## RV_FI_EW 0.4290837 0.48497902 0.40449434 0.291584229
## FEMN_EW 0.5715463 0.62460590 0.70962841 0.396111296
## QEMN_EW 0.3538599 0.43352839 0.50292971 0.312763570
## Stat_Arb_EW 0.3722156 0.41003278 0.48228642 0.233203420
## Struct_Credit_EW 0.3932673 0.49719525 0.46326153 0.314271037
## LS_US_EW Activist_EW Distressed_EW EM_FI_EW Risk_Arb_EW
## CTA_EW 0.12257903 -0.02725582 -0.06959501 -0.02629483 0.10025496
## GAA_EW 0.42256098 0.34707850 0.29261413 0.32780172 0.34145982
## Global_Macro_EW 0.51706311 0.37326421 0.36038497 0.36751742 0.42838542
## Insurance 0.09305335 0.04457368 0.12131419 0.11441308 0.07333043
## LS_AsiaPacific_EW 0.75339052 0.68532137 0.64432687 0.59891390 0.54868534
## LS_Emerging_EW 0.76657822 0.70069722 0.72871412 0.73570708 0.54897213
## LS_Europe_EW 0.83364392 0.76213748 0.69944917 0.59124636 0.60665110
## LS_Japan_EW 0.54554624 0.54025588 0.48409786 0.37090945 0.35524129
## LS_US_EW 1.00000000 0.90606378 0.79517774 0.64181362 0.63964080
## Activist_EW 0.90606378 1.00000000 0.81246753 0.69970853 0.65101000
## Distressed_EW 0.79517774 0.81246753 1.00000000 0.81504974 0.57789605
## EM_FI_EW 0.64181362 0.69970853 0.81504974 1.00000000 0.51662792
## Risk_Arb_EW 0.63964080 0.65101000 0.57789605 0.51662792 1.00000000
## CB_Arb_EW 0.67785692 0.69313353 0.78639534 0.75068511 0.56341116
## RV_Credit_EW 0.74427774 0.75207768 0.91848887 0.79758871 0.53665639
## RV_FI_EW 0.43312106 0.42861395 0.48214087 0.53603056 0.37613694
## FEMN_EW 0.67913065 0.47666640 0.50557368 0.42940635 0.49948263
## QEMN_EW 0.36343220 0.27230228 0.32011730 0.28255854 0.19165180
## Stat_Arb_EW 0.48018488 0.40034471 0.29989586 0.31069024 0.31854123
## Struct_Credit_EW 0.49124996 0.55953968 0.78135732 0.75294566 0.49557914
## CB_Arb_EW RV_Credit_EW RV_FI_EW FEMN_EW QEMN_EW
## CTA_EW -0.07962266 -0.06624405 -0.1139562 0.1911449 0.2970310
## GAA_EW 0.30312500 0.31982005 0.2306902 0.3957134 0.4962218
## Global_Macro_EW 0.26758387 0.32088636 0.2338370 0.5700407 0.3393820
## Insurance 0.10601017 0.12744401 0.1148293 0.1149162 0.0951647
## LS_AsiaPacific_EW 0.63779528 0.65574301 0.4290837 0.5715463 0.3538599
## LS_Emerging_EW 0.67070627 0.72187189 0.4849790 0.6246059 0.4335284
## LS_Europe_EW 0.58656248 0.67222154 0.4044943 0.7096284 0.5029297
## LS_Japan_EW 0.39989096 0.43516511 0.2915842 0.3961113 0.3127636
## LS_US_EW 0.67785692 0.74427774 0.4331211 0.6791307 0.3634322
## Activist_EW 0.69313353 0.75207768 0.4286140 0.4766664 0.2723023
## Distressed_EW 0.78639534 0.91848887 0.4821409 0.5055737 0.3201173
## EM_FI_EW 0.75068511 0.79758871 0.5360306 0.4294063 0.2825585
## Risk_Arb_EW 0.56341116 0.53665639 0.3761369 0.4994826 0.1916518
## CB_Arb_EW 1.00000000 0.87374707 0.7038027 0.5026284 0.2341128
## RV_Credit_EW 0.87374707 1.00000000 0.5796750 0.5129975 0.3087876
## RV_FI_EW 0.70380267 0.57967501 1.0000000 0.3670377 0.1807845
## FEMN_EW 0.50262841 0.51299753 0.3670377 1.0000000 0.4004686
## QEMN_EW 0.23411285 0.30878764 0.1807845 0.4004686 1.0000000
## Stat_Arb_EW 0.33960253 0.35049878 0.2974508 0.5101427 0.5392435
## Struct_Credit_EW 0.59779522 0.67717901 0.3940039 0.3527211 0.2584783
## Stat_Arb_EW Struct_Credit_EW
## CTA_EW 0.22107299 -0.1022806
## GAA_EW 0.39657026 0.1866891
## Global_Macro_EW 0.31938751 0.2717075
## Insurance 0.04140549 0.1325680
## LS_AsiaPacific_EW 0.37221557 0.3932673
## LS_Emerging_EW 0.41003278 0.4971952
## LS_Europe_EW 0.48228642 0.4632615
## LS_Japan_EW 0.23320342 0.3142710
## LS_US_EW 0.48018488 0.4912500
## Activist_EW 0.40034471 0.5595397
## Distressed_EW 0.29989586 0.7813573
## EM_FI_EW 0.31069024 0.7529457
## Risk_Arb_EW 0.31854123 0.4955791
## CB_Arb_EW 0.33960253 0.5977952
## RV_Credit_EW 0.35049878 0.6771790
## RV_FI_EW 0.29745076 0.3940039
## FEMN_EW 0.51014272 0.3527211
## QEMN_EW 0.53924347 0.2584783
## Stat_Arb_EW 1.00000000 0.1722873
## Struct_Credit_EW 0.17228732 1.0000000
heatmap(df,scale="row")

pheatmap(df,cutree_rows = 8)

#Calculate the clusters
set.seed(1)
distance<-get_dist(df,method="euclidean")
fviz_dist(distance,gradient=list(low="#00AFBB",mid="white",high="#FC4E07"))

fviz_nbclust(df,kmeans,method="wss")

fviz_nbclust(df,kmeans,method="silhouette")

gap_stat <- clusGap(df, FUN = kmeans, nstart = 25, d.power=1,
K.max = 12, B = 300)
fviz_gap_stat(gap_stat)

k2<-kmeans(df,centers = 8,nstart = 25)
fviz_cluster(k2,data=df,main="K means")
